void main() {
  //使用var声明变量，var来替代具体类型的声明，会自动推导变量的类型，这是因为var并不是直接存储对象，而是存储对象引用，所以var可以声明任何变量
  // 包括两种情况：
  //1、仅有声明未赋值的时候
  var color; // 这里的color的类型是dynamic,所以它的类型是可以变的
  color = 'red';
  print(color is String); //true
  color = 0xffff0000;
  print(color is int);  //true
  //2、声明并赋值， 如果var声明的变量开始不初始化，不仅值可以改变它的类型也是可以被修改的，但是一旦开始初始化赋值后，它的类型就确定了，后续不能被改变
  var colorValue = 0xffff0000; //声明时并赋值，这里colorValue类型已经推导出为int,并且确定了类型
//  colorValue = 'red'; //会报错，抛出编译异常，String类型的值不能赋值给int类型
  print(colorValue is int); //true
  /***************************************************************************************************/
  //推荐使用具体类型来声明变量
  int a = 10;
  String str = 'dart';
  //如果对象不限于单一类型（没有明确的类型），请使用Object或dynamic关键字
  //dynamic类型一般用于无法确定具体类型, 注意: 建议不要滥用dynamic，一般尽量使用Object,
  //Object和dynamic区别在于: Object会在编译阶段检查类型，而dynamic不会在编译阶段检查类型
  dynamic name = 'jack';
  name = 10;
  //var不是数据类型，但是Object和dynamic是数据类型，var声明变量但是未赋值的时候，类型就是dynamic的
}
